package aOrganizar;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;

/**
 * 
 * @author Braghini Marcos
 * 
 */
public class Usuario {
	private List<Busqueda> busquedas = new ArrayList<Busqueda>();
	private static Double RECARGO_NO_PAGO = 20.0;
	private boolean esPago = false;
	private String dni;
	private double montoGastado = 0;
	private String nombre;
	private String apellido;
	private List<Asiento> comprados = new ArrayList<Asiento>();

	public List<Asiento> getComprados() {
		return comprados;
	}

	public Usuario(String apellido, String nombre, String dni) {
		this.apellido = apellido;
		this.nombre = nombre;
		this.dni = dni;
	}

	public Usuario() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * Recibe una Busqueda y la agrega a la coleccion de busquedas del usuario.
	 * 
	 * @param Busqueda
	 *            busqueda
	 */
	public void registrarBusqueda(Busqueda busqueda) {
		busquedas.add(busqueda);
	}

	/**
	 * Agrega el monto gastado en una compra de un asiento a el monto gastado
	 * total del usuario
	 * 
	 * @param asiento
	 */
	public void registraCompra(Asiento asiento) {
		comprados.add(asiento);

	}

	/**
	 * Si el usuario no es VIP, filtra las super ofertas.
	 * 
	 * @param itinerarios
	 * @return
	 */
	public Collection<Itinerario> filtrarSuperOfertas(
			Collection<Itinerario> itinerarios) {
		if (this.esVip())
			return itinerarios;
		Collection<Itinerario> itinerariosFiltrados = new HashSet<Itinerario>();
		for (Itinerario itinerario : itinerarios) {
			if (!itinerario.esSuperOferta()) {
				itinerariosFiltrados.add(itinerario);
			}
		}
		return itinerariosFiltrados;
	}

	public boolean esVip() {
		return montoGastado > 100000;
	}

	public Double calculaPrecio(double precioOriginal) {
		if (this.getEsPago())
			return precioOriginal;
		return precioOriginal + RECARGO_NO_PAGO;

	}

	//
	// Getters y Setters
	//

	public List<Busqueda> getBusquedas() {
		return busquedas;
	}

	public void setBusquedas(ArrayList<Busqueda> busquedas) {
		this.busquedas = busquedas;
	}

	public boolean getEsPago() {
		return esPago;
	}

	public void setEsPago(boolean paga) {
		this.esPago = paga;
	}

	public String getDni() {
		return dni;
	}

	public void setDni(String dni) {
		this.dni = dni;
	}

	public double getMontoGastado() {

		Integer monto = 0;
		for (Asiento asiento : comprados) {
			monto = (int) (monto + asiento.getPrecio());
		}
		return monto;
	}

	public void setMontoGastado(double montoGastado) {
		this.montoGastado = montoGastado;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getApellido() {
		return apellido;
	}

	public void setApellido(String apellido) {
		this.apellido = apellido;
	}

}
